A freespace file, such as that managed by the Freespace database management system from Unisys, supports different record sizes in the same file and permits the file to grow when an application needs additional file space and contract when the application requires less space.
A freespace file is divided into multiple cells that are equal in size. Within the cells, data is organized in units of basic records. Storage for n basic records is available in each cell. Different record types may be defined to satisfy different storage requests, where each record type is defined to be a fixed number of basic records. For example, a first type may be defined by one basic record, a second type by two basic records and so on.
The following information is used to manage a freespace file. Each cell has an associated bit map that tracks which basic records in the cell are allocated and which are available. An index table for a freespace file contains entries that are pointers to the bit maps of the cells of the file. The index table is divided into sections, and each section is stored in persistent storage as a node in a linked list. The entries in each section of the index table reference an associated subset of the cells of the file.
A control file, which is also a freespace file, is used in managing freespace files. The control file contains the same control structures used by other freespace files, along with system-specific control blocks and space that are used to manage all the freespace files.
When a file with the freespace control structure format is made recognizable as a freespace file, or registered with the freespace system, parts of the control structures contained in the freespace file are copied to the freespace control file. At that time, the parts of the control structures that are pointers must be changed in the control file to reference other locations within the control file. The control structures in the freespace file are not changed. A fixed-size index table is also created in the control file for managing the freespace file. The size of the index table that is created in the control file is determined by a value stored in association with the freespace file that indicates the maximum number of cells that may be defined in the file. The fixed-size index table in the control file is populated with pointers to the locations of the file's bit maps in the freespace control file.
Once the file is registered, it may be made available for allocating and releasing records by requesting that the file be brought online. Making the file available causes the operating system to read portions of the file's control structures from the freespace control file into memory. This also causes another control structure to be built for the file in the control file and in memory. This is the Available Record Table (ART). The available-record table that is generated from the bit maps indicates for each cell the number of basic records that are available for allocation. The number of entries in the ART is equal to the number of cells in the file.
If the size of a freespace file is to be increased and the fixed-size index table in the control file is not large enough to accommodate pointers to the new bit maps that are needed, the file is taken offline, deregistered, and access to the file by an application is effectively halted. Thus, a database application using a freespace file would be unable to continue operations on the file. For some applications, any down time is intolerable.
A system and a method that address these and other related problems are therefore desirable.